package org.example.old.dto;

import org.example.old.factory.JdkProxyFactory;
import org.example.old.impl.SmsServiceImpl;
import org.example.old.service.SmsService;

import java.lang.reflect.InvocationTargetException;

public class ClassMain {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        SmsService service = (SmsService) JdkProxyFactory.getProxy(new SmsServiceImpl());
//        SmsProxy smsProxy = new SmsProxy(service);
        service.send("jjj");



        //        /**
//         * 获取TargetObject类的Class对象并且创建TargetObject类实例
//         */
//        Class<?> targetClass = Class.forName("org.example.dto.TargetObject");
//        TargetObject targetObject = (TargetObject) targetClass.newInstance();
//        /**
//         * 获取TargetObject类中定义的所有方法
//         */
//        Method[] methods = targetClass.getDeclaredMethods();
//        for(Method method:methods){
//            System.out.println(method.getName());
//        }
//        /**
//         * 获取指定方法并调用
//         */
//        Method publicMethod = targetClass.getDeclaredMethod("publicMethod", String.class);
//        publicMethod.invoke(targetObject,"111");
//
//        /**
//         * 获取指定参数并对参数进行修改
//         */
//        Field field = targetClass.getDeclaredField("value");
//        // 为了对类中的参数进行修改我们取消安全检查
//        field.setAccessible(true);
//        field.set(targetObject,"11");
//
//        /**
//         * 调用private方法
//         */
//        Method privateMethod = targetClass.getDeclaredMethod("publicMethod");
//        // 为了调用private方法我们取消安全检查
//        privateMethod.setAccessible(true);
//        privateMethod.invoke(targetObject);
    }
}
